/** Request 网络请求工具 更详细的 api 文档: https://github.com/umijs/umi-request */
import { extend } from 'umi-request';
import { notification } from 'antd';
import { getDvaApp } from 'umi';

/* eslint-disable no-underscore-dangle */

const codeMessage = {
  400: '请求错误，服务器无法解析该请求',
  401: '没有进行身份验证或验证未通过',
  403: '没有访问权限，服务器拒绝此请求',
  404: '服务器找不到请求',
  406: '无法使用请求的内容响应请求',
  410: '请求的资源被永久删除',
  422: '请求含有语义错误，无法响应',
  500: '服务器发生错误，请检查服务器',
  502: '网关错误',
  503: '服务不可用，服务器暂时过载或维护',
  504: '网关超时',
};

/** 异常处理程序 */
const errorHandler = (error) => {
  const { response } = error;
  if (!response) {
    notification.error({
      description: '您的网络发生异常，无法连接服务器',
      message: '网络异常',
    });
  } else if (response.status === 401) {
    getDvaApp()._store.dispatch({
      type: 'login/sessionTimeout',
      payload: { sessionTimeout: true },
    });
  } else {
    const errorText = codeMessage[response.status] || response.statusText;
    const { status } = response;
    notification.error({
      message: `请求错误 ${status}`,
      description: errorText,
    });
  }
  return { success: false };
};

/** 配置request请求时的默认参数 */
const request = extend({
  requestType: 'form',
  prefix: '/api',
  credentials: 'include', // 默认请求是否带上cookie
  errorHandler,
});
export default request;
